package br.edu.fanor.geract.business.impl;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.interceptor.Interceptors;

import br.edu.fanor.geract.business.EquipeSession;
import br.edu.fanor.geract.dao.AlunoDAO;
import br.edu.fanor.geract.dao.EquipeDAO;
import br.edu.fanor.geract.entity.Alunos;
import br.edu.fanor.geract.entity.Equipes;
import br.edu.fanor.geract.interceptor.EquipeInterceptor;

@Interceptors({EquipeInterceptor.class})
@TransactionManagement(TransactionManagementType.CONTAINER)
@Stateless(mappedName="ejb/equipeSession")
public class EquipeSessionImpl implements EquipeSession {

	@EJB
	private EquipeDAO equipeDAO;
	@EJB
	private AlunoDAO alunoDAO;
	
	@PostConstruct
	public void postConstruct() {
		System.out.println("Criou o EJB EquipeSessionImpl");
	}

	@TransactionAttribute(TransactionAttributeType.NEVER)
	public void inserirAlterarEquipe(Equipes equipe, List<Alunos> alunos) throws Exception{
		
		//para cada aluno
		for (Alunos aluno : alunos) {
			
			//equipe ainda não estava cadastrada
			if(equipe.getId() == null) {
				equipe = equipeDAO.inserir(equipe);
			}
			
			aluno.setEquipe(equipe);
			
			//aluno já cadastrado
			if(aluno.getId() != null){
				alunoDAO.atualizar(aluno);
			} else { //aluno ainda não cadastrado
				aluno = alunoDAO.inserir(aluno);
			}
			
			equipe.getAlunos().add(aluno);
			equipeDAO.atualizar(equipe);
			
		}
	}
	
	
	@PreDestroy
	public void preDestroy(){
		System.out.println("Destruiu o EJB EquipeSessionImpl");
	}

	@Override
	public void inserir(Equipes equipe) {
		equipeDAO.inserir(equipe);
	}
	
}
